package com.atguigu.fruit.servlets;

import com.atguigu.fruit.dao.FruitDAO;
import com.atguigu.fruit.dao.impl.FruitDAOImpl;
import com.atguigu.fruit.pojo.Fruit;
import com.atguigu.myssm.myspringmvc.ViewBaseServlet;
import com.atguigu.myssm.util.StringUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/update.do")
public class UpdateServlet extends ViewBaseServlet {

    private FruitDAO fruitDAO = new FruitDAOImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 前端页面post表单提交的数据是以utf-8字符编码传给后端这里了
         * 但是如果后端不指定设置字符编码格式，默认是以iso8859-1解码的
         * 故在req请求获取参数之前，req需要先设置以哪种编码解析前端传过来的数据
         */
        req.setCharacterEncoding("utf-8");
        String rid = req.getParameter("fid");
        String name = req.getParameter("fname");
        String rprice = req.getParameter("price");
        String rcount = req.getParameter("fcount");
        String remark = req.getParameter("remark");
        try {
            //这几个字段不能为空
            if (StringUtil.isEmpty(rid)||StringUtil.isEmpty(rprice)||StringUtil.isEmpty(rcount)) {
                req.setAttribute("msg","水果价格跟数量不能为空！");
                processTemplate("error",req,resp);
            }else {
                Integer fruitId = Integer.valueOf(rid);
                Integer price = Integer.valueOf(rprice);
                Integer count = Integer.valueOf(rcount);
                /**
                 *我们这里是没有考虑异常，然后数据库回滚的，这点注意下知道即可，后续框架集成好的
                 * 知道如果异常要回滚，还有事务的一致性即可
                 */

                fruitDAO.updateFruit(new Fruit(fruitId,name,price,count,remark));
                String contextPath = req.getContextPath();
                String path = contextPath + "/index";
                /**
                 * 重定向到index主页
                 * 目的是重新给IndexServlet发请求，重新获取furitList，然后覆盖到session中，这样index.html页面上显示的session中的数据才是最新
                 */
                resp.sendRedirect(path);

                /**
                 * 此时不能用 processTemplate("index",req,resp);
                 * 转发还是当前请求，会导致不会去获取数据库最新的数据
                 */
                //processTemplate("index",req,resp);
            }
        }catch (Exception e){
            //如果异常，返回错误页面
            processTemplate("error",req,resp);
        }

    }
}
